import { getPaperBySlug } from "@autoscholar/core"; import { handler, json } from "@/lib/server/api"; import { db } from "@/lib/server/db"; export const runtime = "nodejs"; /** Public projection only: never serializes run/worker internals. */ export const GET = handler(async (_req, { params }) => { const { slug } = (await params) as { slug: string }; const p = await getPaperBySlug(db(), slug); const v = p.version; const withdrawn = (v.metadata as { artifactsWithdrawn?: boolean }).artifactsWithdrawn === true; return json( { ...p.summary, metadata: { contributions: (v.metadata as Record).contributions, methods: (v.metadata as Record).methods, mainResults: (v.metadata as Record).mainResults, limitations: (v.metadata as Record).limitations, dataAvailability: (v.metadata as Record).dataAvailability, codeAvailability: (v.metadata as Record).codeAvailability, }, artifacts: withdrawn ? [] : v.artifactSet, pdf: withdrawn ? null : v.pdfPublicPath, qaSummary: v.qaSummary, provenance: v.provenance, versions: p.versions.map((x) => ({ versionNo: x.versionNo, publishedAt: x.publishedAt, changelog: x.changelog, pdf: withdrawn ? null : x.pdfPublicPath, })), corrections: p.corrections, retraction: p.retraction ? { notice: p.retraction.notice, retractedAt: p.retraction.retractedAt } : null, related: p.related, disclosure: "AI-generated working paper; not formally peer reviewed. Research computed on MacLustr.", }, { headers: { "cache-control": "public, max-age=120, stale-while-revalidate=600" } }, ); });